package com.zyf.EasyNet.dao;

import com.zyf.EasyNet.dataobject.UserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @first_author zyflzz
 * @gmt_created 2022/6/3
 * @gmt_modified 2022/6/3
 */
@Mapper
public interface UserDAO {

    /**
     * 插入多个用户
     *
     * @param userDOs 用户 DO 列表
     * @return 插入的行数
     */
    int batchAdd(@Param("list") List<UserDO> userDOs);

    /**
     * 通过一串 id 查找一些用户
     *
     * @param ids id 列表
     * @return 用户 DO 数据列表
     */
    List<UserDO> findByIds(@Param("ids") List<Long> ids);

    /**
     * 添加用户
     *
     * @param userDO 用户 DO 数据
     * @return 插入行数
     */
    int add(UserDO userDO);

    /**
     * 更新用户
     *
     * @param userDO 用户 DO 数据
     * @return 更新的行数
     */
    int update(UserDO userDO);

    /**
     * 删除用户
     *
     * @param id 用户 id
     * @return 删除的行数
     */
    int delete(@Param("id") long id);

    /**
     * 查询所有用户
     *
     * @return 用户 DO 数据列表
     */
    List<UserDO> findAll();

    /**
     * 通过用户名查找用户
     *
     * @param name 用户名
     * @return 查找到的用户 DO 数据
     */
    UserDO findByUserName(@Param("userName") String name);

    /**
     * 根据关键词查找用户
     * 关键词指用户名或者昵称中含有的词
     * 例如：搜索”张“可能会出现”张三“、”张四“、”张五“等
     *
     * @param keyWord 关键词
     * @return 用户 DO 列表
     */
    List<UserDO> query(@Param("keyWord") String keyWord);

    /**
     * 根据关键词和创建时间查找用户
     *
     * @param keyWord   关键词
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 用户 DO 列表
     */
    List<UserDO> search(@Param("keyWord") String keyWord, @Param("startTime") LocalDateTime startTime,
                        @Param("endTime") LocalDateTime endTime);

}
